#pragma once
#include <Rz/IObject.h>

namespace Rz {

class IInitializable :
	virtual public IObject
{
	public:
		RZ_RTTI_INTERFACE(Rz, IInitializable);
		RZ_RTTI_IMPLEMENTS(IObject);
		RZ_RTTI_END;

		virtual bool Init() = 0;
		virtual bool End() = 0;
};

template <typename ...Types>
class IParametrizedInitializable :
	virtual public IObject,
	virtual public IInitializable
{
	public:
		RZ_RTTI_INTERFACE(Rz, IParametrizedInitializable);
		RZ_RTTI_IMPLEMENTS(IObject, IInitializable);
		//RZ_RTTI_TEMPLATES();
		RZ_RTTI_END;

		virtual bool Init(Types... initParams) = 0;
};

}
